#ifndef MD_SYSMSG_H
#define MD_SYSMSG_H

#ifdef _cplusplus
extern "C" {
#endif


#include "common_conf.h"
#include <stdint.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

/*
struct msqid_ds   结构体说明：

    msg_perm;   操作权限结构 
    msg_first;  指向消息队列的第一个结构
    msg_last;   指向消息队列的最后一个结构
    msg_cbytes; 队列中当前字节数
    msg_qnum;   队列中消息数
    msg_qbytes; 队列可容纳的最大字节数
    msg_lspid;  最后发送消息的进程号
    msg_lrpid;  最后接收消息的进程号
    msg_stime;  最后发送时间
    msg_rtime;  最后接收时间
    msg_ctime;  消息队列最后修改时间
*/

#pragma pack(1)
typedef struct	_vqueue_data_t{
	int isrc_addr;
    int idest_addr;
    uint16_t    u16cmd;
    uint16_t    u16mess_len;
    uint8_t     au8mess[];          
}t_vqueue_data,*pt_vqueue_data;
#pragma pack()


int que_create(const char *pcpathname, int iid);
int que_remove(int ifd);
int tx_paddr_que(int ifd,
                     uint16_t u16cmd, 
                    void* pttx_que_data_mess, 
                    uint16_t u16tx_que_mess_len, 
                    int isrc_que_index,
                    int idest_que_index);

int rx_paddr_que(int ifd,int is_block, long *idest_que_index,
                    void* ptrx_que_addr);

int tx_sys_que(int ifd,
                    uint16_t u16cmd, 
                    void* pttx_que_data_mess, 
                    uint16_t u16tx_que_mess_len, 
                    int isrc_que_index,
                    int idest_que_index);

int rx_sys_que(int ifd,
					int is_block,
                    long *idest_que_index,
                    uint8_t* ptrx_que_data_mess, 
                    uint16_t u16rx_que_mess_len);

int tx_sys_que2(int ifd,
					long int itype,
                    void* pttx_que_data_mess);
#ifdef _cplusplus
}
#endif

#endif